import logging
import sys
import time
from pathlib import Path

from config.config_manager import WATCHED_DIR  # 确保从配置文件中正确加载
from processer.file_processor import process_file  # 导入文件处理逻辑


def scan_directory(directory: Path):
    """
    扫描指定目录中的文件并处理
    """
    logging.debug(f"开始扫描目录：{directory}")
    for file_path in directory.iterdir():  # 遍历目录中的文件
        if file_path.is_file():  # 只处理文件，忽略子目录
            logging.debug(f"检测到文件：{file_path}")
            process_file(file_path)  # 调用文件处理逻辑


def start_watching():
    """
    启动定时扫描
    """
    # 确保 WATCHED_DIR 是一个路径列表
    if isinstance(WATCHED_DIR, str):
        watched_dirs = [Path(WATCHED_DIR)]  # 如果是字符串，转换为单个路径
    elif isinstance(WATCHED_DIR, list):
        watched_dirs = [Path(dir) for dir in WATCHED_DIR]  # 如果是列表，转换为路径列表
    else:
        logging.error("WATCHED_DIR 配置格式错误，必须是字符串或路径列表")
        sys.exit(1)

    # 检查每个目录是否存在且是目录
    invalid_dirs = [dir for dir in watched_dirs if not dir.exists() or not dir.is_dir()]
    if invalid_dirs:
        for dir in invalid_dirs:
            logging.error(f"监听目录不存在：{dir}")
            watched_dirs.remove(dir)  # 从监听目录中移除无效目录
        if not watched_dirs:
            logging.error("所有监听目录均无效，程序退出")
            sys.exit(1)

    logging.info(f"开始定时扫描目录：{', '.join(str(dir) for dir in watched_dirs)}")
    try:
        while True:
            for dir in watched_dirs:
                scan_directory(dir)  # 扫描每个目录
            time.sleep(5)  # 每隔5秒扫描一次
    except KeyboardInterrupt:
        logging.info("定时扫描停止")


if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
    start_watching()
